// 创建用户相关的小仓库
import { defineStore } from 'pinia'

// 引入接口
import { reqLogin } from '@/api/user'
// 引入接口对应的数据类型
import type { loginForm, loginResPonseData } from '@/api/user/type'

// 创建用户小仓库
let userStore = defineStore('User', {
    // 小仓库存储数据的地方
    state: () => {
        return {
            token: localStorage.getItem('TOKEN'),  // 用户唯一标识 token
        }
    },
    // 异步 || 逻辑的地方
    actions: {
        // 用户登录的方法
        async userLogin(data: loginForm) {
            // 登录请求
            let res:loginResPonseData = await reqLogin(data)
            // console.log(res,'登陆接口返回数据');
            // 登录请求
                // 成功：200 -> token
                // 失败：201 -> 失败的错误信息

            // ***************** 方法一，三 *****************
            if(res.code == 200) {
                // pinia 仓库存储一下 token
                // 由于 pinia || vuex 存储数据其实利用js对象
                this.token = res.data.token;
                // 本地存储：持久化存储一份
                localStorage.setItem('TOKEN',res.data.token);
                return true
            } else {
                // 方法一
                return Promise.reject(new Error(res.data.message))
                // 方法三
                // return res.data.message
            }
            // ***************** 方法一，三 *****************

            // ***************** 方法二 *****************
            // 不想在仓库中去操作接口返回的内容可以直接 return 接口返回的数据
            // 然后去使用的地方 .then((response) => {}).catch((error) => {})
            // return res
        },
    },
    // 计算属性
    getters: {

    }
})
// 对外暴露小仓库
export default userStore;